<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // 基础语法: await  后面的代码全部变成异步代码
                    // await 只能等promise实例,其他的一概不等

        async function fu(){
            console.log('开始获取用户姓名');
          await new Promise((resolve,reject)=>{
            
            
                try{
                    // throw new Error('错了')
                    setTimeout(()=>{
                        console.log('获取用户姓名成功');
                        const name = {
                            name : 'chen'
                        }
                        resolve('成功')
                        reject('失败');
                    },1000)
                }
                catch(e){
                    reject(e.message)
                }
            })
            console.log('看看是不是先打印');

            return  Promise.resolve(1)
        }
        // async 默认返回一个pending状态的promise实例
       const p = fu();
       //当 async执行完毕,返回一个成功promise实例,值为async函数的返回值. 不写就是undefined
       //如果async内部出现错误,则返回一个错误promise实例,返回值是错误信息,并且中断运行
       //当async中await等待的promise实例为失败状态,则async的返回值和失败的实例保持一致,并停止当前promise之后的代码运行
       //如果async 直接return一个promise实例,则返回值和retrun的这个实例保持一致(前提不是失败状态)

         //    await 的返回值就是等待的promise 的返回值

       console.log(p); 

        
    </script>
</body>
</html>